<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>

  <body>
    <script>
      // Object.defineProperty() 定义新属性或修改原有的属性
      var obj = {
        id: 1,
        pname: '小米',
        price: 1999
      }
      // 1. 以前的对象添加和修改属性的方式
      // obj.num = 1000;
      // obj.price = 99;
      // console.log(obj);
      // 2. Object.defineProperty() 定义新属性或修改原有的属性
      Object.defineProperty(obj, 'num', {
        value: 1000,
        enumerable: true
      })
      console.log(obj)
      Object.defineProperty(obj, 'price', {
        value: 9.9
      })
      console.log(obj)
      Object.defineProperty(obj, 'id', {
        // 如果值为false 不允许修改这个属性值 默认值也是false
        writable: false
      })
      obj.id = 2
      console.log(obj)
      Object.defineProperty(obj, 'address', {
        value: '中国山东蓝翔技校xx单元',
        // 如果只为false 不允许修改这个属性值 默认值也是false
        writable: false,
        // enumerable 如果值为false 则不允许遍历, 默认的值是 false
        enumerable: false,
        // configurable 如果为false 则不允许删除这个属性 不允许在修改第三个参数里面的特性 默认为false
        configurable: false
      })
      console.log(obj)
      console.log(Object.keys(obj)) // ['id', 'pname', 'price', 'num']
      delete obj.address
      console.log(obj)
      delete obj.pname
      console.log(obj)
      //   Object.defineProperty(obj, 'address', {
      //     value: '中国山东蓝翔技校xx单元',
      //     // 如果值为false 不允许修改这个属性值 默认值也是false
      //     writable: true,
      //     // enumerable 如果值为false 则不允许遍历, 默认的值是 false
      //     enumerable: true,
      //     // configurable 如果为false 则不允许删除这个属性 默认为false
      //     configurable: true
      //   })
      console.log(obj.address)
    </script>
  </body>
</html>
